const os = require('os');
const process = require('process');
const { exec, execSync } = require('child_process');
const readline = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});

console.log('-----------------------------------------------');
console.log(`CPU 架构: ${os.arch()}`);
console.log(`操作系统版本: ${os.release()}`);

console.log('-----------------------------------------------');
console.log(`进程 ID: ${process.pid}`);
console.log(`Node.js 可执行文件路径: ${process.execPath}`);

console.log('-----------------------------------------------');
// 暂停程序执行以等待用户输入  
console.log('按任意键继续...');
readline.question('', () => {
  readline.close();

  // 执行 Linux 命令 ps aux 并验证进程 ID  
  exec('ps aux', (error, stdout, stderr) => {
    if (error) {
      console.error(`执行 ps aux 出错: ${error}`);
      return;
    }
    console.log(`ps aux 输出: ${stdout}`);
  });

  console.log('-----------------------------------------------');
  console.log(`Node.js 版本: ${process.version}`);

  console.log('-----------------------------------------------');
  console.log(`当前脚本路径: ${__filename}`);

  console.log('-----------------------------------------------');
  console.log(`当前工作目录: ${process.cwd()}`);

  console.log('-----------------------------------------------');
  // 打印 CPU 信息，运行 cat /proc/cpuinfo（仅限 Linux）  
  if (os.platform() === 'linux') {
    try {
      const cpuInfo = execSync('cat /proc/cpuinfo').toString();
      console.log('CPU 信息:\n', cpuInfo);
    } catch (error) {
      console.error('获取 CPU 信息时出错:', error);
    }
  }

  console.log('-----------------------------------------------');
  // 打印操作系统的运行时长  
  try {
    const uptime = execSync('uptime').toString().split(' ')[2]; // 假设 uptime 命令输出格式是 "xx:xx:xx up xx days,  xx:xx"  
    console.log(`系统运行时长: ${uptime}`);
  } catch (error) {
    console.error('获取系统运行时长时出错:', error);
  }

  console.log('-----------------------------------------------');
  // 打印操作系统的版本信息  
  console.log(`操作系统版本（uname -r）: ${os.release()}`); // 注意：这里已经打印过，但用 uname -r 风格再次展示  

  console.log('-----------------------------------------------');
  // 打印操作系统的内核信息  
  console.log(`内核信息（uname -a）: ${os.platform()} ${os.release()} ${os.arch()}`);
  // 或者，更详细的信息（仅限 Unix/Linux）  
  if (os.platform() === 'linux' || os.platform() === 'darwin') {
    try {
      const kernelInfo = execSync('uname -a').toString().trim();
      console.log(`uname -a 输出: ${kernelInfo}`);
    } catch (error) {
      console.error('获取内核信息时出错:', error);
    }
  }

  console.log('-----------------------------------------------');
  // 打印网卡信息  
  if (os.platform() === 'linux' || os.platform() === 'darwin') {
    try {
      const networkInfo = execSync('ifconfig').toString();
      console.log('网卡信息:\n', networkInfo);
    } catch (error) {
      console.error('获取网卡信息时出错:', error);
    }
  }
});